1862F - Magic Will Save the World - CodeForces Solution


binary search bitmasks dp

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
using namespace std;

vector<bool> cur;

bool check(int time, int f, int w, int sum) {
    long long fval = 1LL * time * f, wval = 1LL * time * w;
    
    int closestVal = 0;
    for(long long s = min(0LL+sum, fval); s >= 0; s--) {
        if(cur[s]) {
            closestVal = s;
            break;
        }
    }
    int remVal = sum - closestVal;
    return (wval >= remVal);
}

void solve() {
    int n, f, w;
    cin >> w >> f >> n;
    vector<int> arr(n);
    int sum = 0;
    for(int i = 0; i < n; i++) {
        cin >> arr[i]; sum += arr[i];
    }

    vector<bool> dp(sum+1, false);
    cur.clear();
    cur.resize(sum+1, false);
    dp[0] = true;
    dp[arr[0]] = true;
    for(int i = 1; i < n; i++) {
        for(int s = 1; s <= sum; s++) {
            cur[s] = dp[s];
            if(s-arr[i] >= 0)
                cur[s] = cur[s] | dp[s-arr[i]];
        }
        dp = cur;
    }
    cur = dp;

    int l = 0, r = sum;
    while(r - l > 1) {
        int mid = l + (r - l) / 2;
        if(check(mid, f, w, sum))
            r = mid;
        else   
            l = mid;
    }
    cout << r << endl;
}

int main() {
    ios_base::sync_with_stdio(false);
	cin.tie(NULL);
    int t = 1;
    cin >> t;
    while(t-- > 0) solve();
    return 0;
}


Comments

Submit
0 Comments
More Questions

1302. Deepest Leaves Sum
1209. Remove All Adjacent Duplicates in String II
994. Rotting Oranges
983. Minimum Cost For Tickets
973. K Closest Points to Origin
969. Pancake Sorting
967. Numbers With Same Consecutive Differences
957. Prison Cells After N Days
946. Validate Stack Sequences
921. Minimum Add to Make Parentheses Valid
881. Boats to Save People
497. Random Point in Non-overlapping Rectangles
528. Random Pick with Weight
470. Implement Rand10() Using Rand7()
866. Prime Palindrome
1516A - Tit for Tat
622. Design Circular Queue
814. Binary Tree Pruning
791. Custom Sort String
787. Cheapest Flights Within K Stops
779. K-th Symbol in Grammar
701. Insert into a Binary Search Tree
429. N-ary Tree Level Order Traversal
739. Daily Temperatures
647. Palindromic Substrings
583. Delete Operation for Two Strings
518. Coin Change 2
516. Longest Palindromic Subsequence
468. Validate IP Address
450. Delete Node in a BST